package base

// import (
// 	"bytes"
// 	"reflect"
// 	"strings"

// 	log "github.com/sirupsen/logrus"
// 	"github.com/tealeg/xlsx"
// )

// type ColumnHeader struct {
// 	Name    string
// 	Caption string
// 	Width   int
// }
// type Xlsx struct {
// 	dao           Dao
// 	whereCauses   []WhereCause
// 	orderItems    []OrderItem
// 	columnHeaders []ColumnHeader
// }

// func NewXlsx(dao Dao, whereCauses []WhereCause, orderItems []OrderItem, columnHeaders []ColumnHeader) *Xlsx {
// 	xlsxObj := Xlsx{
// 		dao:           dao,
// 		whereCauses:   whereCauses,
// 		orderItems:    orderItems,
// 		columnHeaders: columnHeaders,
// 	}
// 	return &xlsxObj
// }

// //Export 导出数据
// func (x *Xlsx) Export(userID int, pTypes ...string) (*bytes.Buffer, error) {
// 	var err error
// 	var sheet *xlsx.Sheet
// 	file := xlsx.NewFile()
// 	sheet, err = file.AddSheet("Sheet1")
// 	if err != nil {
// 		return nil, err
// 	}
// 	x.createHeader(sheet)
// 	list, err := x.dao.Find(x.whereCauses, x.orderItems, 0, 0, userID, pTypes...)
// 	if err != nil {
// 		return nil, err
// 	}
// 	datas := reflect.ValueOf(list.Objectlist).Elem()
// 	log.Debug(datas)
// 	for i := 0; i < datas.Len(); i++ {
// 		row := sheet.AddRow()
// 		for _, ch := range x.columnHeaders {
// 			cell := row.AddCell()
// 			style := xlsx.Style{
// 				Border: *xlsx.NewBorder("thin", "thin", "thin", "thin"),
// 				Font:   *xlsx.NewFont(12, "宋体"),
// 			}
// 			style.Alignment.Horizontal = "left"
// 			style.Alignment.Vertical = "center"
// 			style.Font.Bold = false
// 			names := strings.Split(ch.Name, ".")
// 			field := datas.Index(i).FieldByName(names[0])
// 			var val interface{}
// 			if l := len(names); l == 1 {
// 				if k := field.Kind(); k == reflect.Ptr {
// 					if field.IsNil() {
// 						val = nil
// 					} else {
// 						val = field.Elem().Interface()
// 					}
// 				} else {
// 					if field.IsValid() {
// 						val = field.Interface()
// 					}
// 				}
// 			} else if l == 2 {
// 				field2 := field.FieldByName(names[1])
// 				val = field2.Interface()
// 			}
// 			if val == nil {
// 				cell.SetValue("")
// 			} else {
// 				cell.SetValue(val)
// 			}
// 			cell.SetStyle(&style)
// 		}
// 	}
// 	buff := new(bytes.Buffer)
// 	file.Write(buff)
// 	return buff, nil
// }
// func (x *Xlsx) createHeader(sheet *xlsx.Sheet) {
// 	row := sheet.AddRow()
// 	for _, ch := range x.columnHeaders {
// 		cell := row.AddCell()
// 		style := xlsx.Style{
// 			Border: *xlsx.NewBorder("thin", "thin", "thin", "thin"),
// 			Font:   *xlsx.NewFont(14, "宋体"),
// 		}
// 		style.Alignment.Horizontal = "center"
// 		style.Alignment.Vertical = "center"
// 		style.Font.Bold = true
// 		cell.Value = ch.Caption
// 		cell.SetStyle(&style)
// 	}
// }
// func (x *Xlsx) getNumFmt(num interface{}) string {
// 	switch num.(type) {
// 	case float64, float32:
// 		return "#,##0.00 ;[red](#,##0).00"
// 	case int64, int32:
// 		return "#,##0 ;[red](#,##0)"
// 	default:
// 		return ""
// 	}
// }
